import { pinyin } from "pinyin-pro";

// 多音字地名特殊映射表
const SPECIAL_CITIES = {
  重庆: "C",
  厦门: "X",
  西藏: "X",
  东莞: "D",
  蔚县: "Y",
  台州: "T",
  丽水: "L",
  // 可继续添加其他特殊地名
};

/**
 * 获取城市拼音首字母（自动处理多音字问题）
 */
function getCityFirstLetter(cityName) {
  // 1. 先检查特殊地名
  for (const [key, value] of Object.entries(SPECIAL_CITIES)) {
    if (cityName.startsWith(key)) {
      return value;
    }
  }

  // 2. 普通城市处理
  const firstChar = cityName.charAt(0);
  return pinyin(firstChar, {
    pattern: "first",
    toneType: "none",
    mode: "surname", // 启用姓氏模式（对多音字更友好）
  }).toUpperCase();
}

/**
 * 修正版：按拼音首字母分组（已处理多音字问题）
 */
export function groupCitiesByLetter(cityList = [], options = {}) {
  const { keepData = false, cityKey = "city" } = options;

  // 数据预处理（添加首字母字段）
  const processedList = cityList.map((item) => {
    const cityName = typeof item === "string" ? item : item[cityKey];
    return {
      name: cityName,
      letter: getCityFirstLetter(cityName), // 关键修改点
      original: keepData ? item : null,
    };
  });

  // 去重（基于城市名）
  const uniqueCities = [];
  const nameSet = new Set();
  processedList.forEach((item) => {
    if (!nameSet.has(item.name)) {
      nameSet.add(item.name);
      uniqueCities.push(item);
    }
  });

  // 按修正后的首字母分组
  const groups = {};
  uniqueCities.forEach((item) => {
    if (!groups[item.letter]) {
      groups[item.letter] = [];
    }
    groups[item.letter].push(keepData ? item.original : item.name);
  });

  // 转换为数组并排序
  return Object.keys(groups)
    .sort()
    .map((letter) => ({
      index: letter,
      data: groups[letter].sort((a, b) => {
        const nameA = keepData ? a[cityKey] : a;
        const nameB = keepData ? b[cityKey] : b;
        return nameA.localeCompare(nameB);
      }),
    }));
}
